#ifndef SETTINGSWIDGET_H
#define SETTINGSWIDGET_H

#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QFormLayout>
#include <QGroupBox>
#include <QComboBox>
#include <QDoubleSpinBox>
#include <QSpinBox>
#include <QCheckBox>
#include <QLineEdit>
#include <QLabel>
#include <QPushButton>
#include <QTimer>
#include <QPainter>
#include <QPixmap>
#include <QIcon>
#include <QScrollArea>
#include "processingsettings.h"
#include "layoutstatemanager.h"
#include "smartpagenumberselector.h"
#include "unifiedcachemanager.h"

class MainWindow;
class PageView;

class SettingsWidget : public QWidget
{
    Q_OBJECT

public:
    explicit SettingsWidget(MainWindow* mainWindow, QWidget* parent = nullptr);
    ~SettingsWidget();

    ProcessingSettings getSettings() const;
    void setSettings(const ProcessingSettings& settings);

    // 获取智能页码选择器（用于连接实时预览信号）
    SmartPageNumberSelector* getSmartPageNumberSelector() const { return m_smartSelector; }

signals:
    void settingsChanged(const ProcessingSettings& settings);
    void pageNumberPositionChanged(const ProcessingSettings::PageNumberSettings& pageNumberSettings);

public slots:
    void onFileListChanged(); // 响应文件列表变化
    void onPageCountChanged(); // 响应页数变化
    void onCurrentPageChanged(); // 响应当前页变化

private slots:
    void onSettingsChanged();
    void onPresetSelected(const QString& presetName);
    void onPageNumberFormatChanged();
    void onMarginChanged();
    void onDPIChanged();
    void notifySettingsChanged();
    void showMarginPresetMenu();  // 新增：显示边距预设菜单

    // 页码相关槽函数（新增 - 一体化设计）
    void onSmartPositionChanged(SmartPageNumberSelector::Position position);
    void onSmartSettingsChanged(const ProcessingSettings::PageNumberSettings& settings);
    void onFontFamilyChanged();
    void onFontSizeChanged();
    void onFontStyleChanged();
    void onFontColorChanged();
    // 精准定位槽函数已移除 - 现在使用直接拖拽定位
    void resetPageNumberToDefaults();

private:
    void setupUI();
    void setupPresets();
    void setupDPIControls();
    void setupMarginControls();
    void setupPageNumberControls();

    void updateContentAreaInfo();
    void updateFileEstimate();
    void updateSmartSelectorPageInfo(); // 更新SmartPageNumberSelector的页码信息
    ProcessingSettings collectCurrentSettings() const;
    void applyMarginPreset(ProcessingSettings::MarginPreset preset);  // 新增：应用边距预设

    // DPI文本解析工具方法
    int extractDPIFromText(const QString& text) const;

    // 预设管理方法
    void updatePresetCombo();
    void saveAsPreset();

    // 获取总页数
    int getTotalPages() const;

    // 自绘图标方法
    QIcon createInfoIcon() const;

    // 主窗口引用
    MainWindow* m_mainWindow;

    // 定时器
    QTimer* m_changeTimer;
    static constexpr int CHANGE_DELAY_MS = 300;

    // 主布局
    QVBoxLayout* m_mainLayout;
    QVBoxLayout* m_scrollLayout;  // 滚动区域的布局

    // 预设方案
    QGroupBox* m_presetGroup;
    QComboBox* m_presetCombo;
    QPushButton* m_savePresetButton;

    // DPI控件
    QGroupBox* m_dpiGroup;
    QComboBox* m_dpiCombo;
    QCheckBox* m_autoOptimizeCheck;
    QLabel* m_dpiDescLabel;
    QLabel* m_fileSizeLabel;

    // 边距控件
    QGroupBox* m_marginGroup;
    QDoubleSpinBox* m_topMarginSpin;
    QDoubleSpinBox* m_bottomMarginSpin;
    QDoubleSpinBox* m_leftMarginSpin;
    QDoubleSpinBox* m_rightMarginSpin;
    QLabel* m_contentAreaLabel;
    QPushButton* m_marginPresetButton;

    // 页码控件（Jony Ive风格重新设计 - 一体化）
    QGroupBox* m_pageNumberGroup;
    QCheckBox* m_pageNumberEnabled;

    // 一体化智能页码选择器
    SmartPageNumberSelector* m_smartSelector;

    // 快速格式选择
    QComboBox* m_pageNumberFormatCombo;
    QLineEdit* m_pageNumberFormatEdit;

    // 字体设置
    QComboBox* m_fontFamilyCombo;
    QComboBox* m_fontSizeCombo;
    QPushButton* m_fontBoldButton;
    QPushButton* m_fontItalicButton;
    QPushButton* m_fontColorButton;

    // 精准定位已移除 - 现在使用直接拖拽定位

    // 其他设置
    QSpinBox* m_startNumberSpin;
    QLabel* m_formatPreviewLabel;

    // 设置数据
    ProcessingSettings m_currentSettings;
    ProcessingSettings m_originalSettings;
};

#endif // SETTINGSWIDGET_H